package com.baosight.risk.api.fltd;

import com.baosight.risk.service.fltd.entity.FltdTask;
import com.baosight.risk.service.fltd.vo.FltdTaskHistoryVO;
import com.baosight.risk.service.fltd.vo.FltdTaskVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;


/**
 * 作者： lishaoqing
 * 时间： 2019年07月15日
 * 描述： FltdTaskService
 * 版本: v1.0
 */
public interface FltdTaskService {

    /**
     * 新增待办任务
     *
     * @param fltdTask 待办任务
     * @return 执行结果
     */
    int insert(FltdTask fltdTask);

    /**
     * 根据主键查询待办
     *
     * @param todoGuid 主键
     * @return 待办任务
     */
    FltdTask selectTaskByTodoGuid(String todoGuid);

    /**
     * 查询待办列表
     *
     * @return 待办列表
     */
    List<FltdTask> selectTaskList(String queryType, FltdTaskVO param, String userCode);

    /**
     * 查询合并前的待办列表
     *
     * @return 待办列表
     */
    List<FltdTask> selectGroupedTask(String userCode, String flowNo, String nodeCode);

    /**
     * 查询指定节点上最后提交的待办
     *
     * @param procGuid 流程实例id
     * @param nodeCode 节点编码
     * @return 待办信息
     */
    FltdTask selectBeforeTask(String procGuid, String nodeCode);

    /**
     * 查询要撤回的待办
     *
     * @param todoGuid 流程实例id
     * @param userCode 当前用户
     * @return 待办列表
     */
    List<FltdTask> selectCancelTask(String todoGuid, String procGuid, String userCode);

    /**
     * 查询当前流程的审批历史
     *
     * @param procGuid 当前流程实例id
     * @return 审批历史
     */
    List<FltdTaskHistoryVO> selectHistory(String procGuid);

    /**
     * 查询指定单位是否已经下发过待办
     * flowNo 流程编码
     * acctYear 年度
     * quarterCode 季度(非必填)
     * deptCode 部门编码
     */
    FltdTask selectExistTask(FltdTask fltdTask);

    /**
     * 查询指定重点风险id是否已启动过流程
     *
     * @param flowNo   流程编码
     * @param taskGuid 重点风险id
     * @param bizGuid  业务id
     * @return 流程实例id
     */
    String selectProcId(String flowNo, String taskGuid, String bizGuid);

    /**
     * 查询待办条数
     *
     * @return 待办条数
     */
    int selectTaskCount(String userCode);

    /**
     * 修改待办状态
     *
     * @param fltdTask 待办信息
     * @return 执行结果
     */
    int updateTaskStatus(FltdTask fltdTask);

    /**
     * 根据主键更新字段
     * @param fltdTask 待办信息
     * @return 执行结果
     */
    int updateByPrimaryKeySelective(FltdTask fltdTask);

    /**
     * 查询我的任务列表
     *
     * @return 任务列表
     */
    List<FltdTask> selectOwnerTask(String bizName, String userCode, String bizDesc, String acctYear, String quarterCurrent);

    /**
     * 查询我的消息条数
     *
     * @return 消息条数
     */
    int selectMessageCount(String userCode);

    /**
     * 查询所有人的消息列表
     * @return 消息列表
     */
    List<FltdTask> selectMessageList(String queryType, FltdTaskVO param, String userCode);

    /**
     * 查询我的未读消息列表
     *
     * @return 未读消息列表
     */
    List<FltdTask> selectUnReadList(String userCode);

    /**
     * 查询我的已读消息列表
     *
     * @return 已读消息列表
     */
    List<FltdTask> selectReadList(String userCode);

    /**
     * 校验是否可以执行汇总提交
     *
     * @param taskVO 待办信息
     * @return 校验结果
     */
    Map<String, Object> checkGroup(FltdTaskVO taskVO);

    /**
     * 查询所有待催办的待办记录
     *
     * @return 催办列表
     */
    List<FltdTask> selectUrgentTask();

    /**
     * 查询当前流程未处理的待办
     * @return 待办信息
     */
    List<FltdTask> selectCurrentTasks(String procGuid, String nodeCode);

    /**
     * 查询当前节点是否可以提交（针对多人提交策略）
     * @param procGuid 流程实例id
     * @param nodeCode 当前节点编码
     * @param currUserCode 当前待办处理人
     *
     */
    Boolean selectCanSubmit(String procGuid, String nodeCode, String currUserCode);

    /**
     * 查询所有人的待办条数
     * @return 所有人的待办条数
     */
    List<FltdTask> selectAllTaskList();

    void closeTask(String todoGuid);

    /**
     * 批量查询当前流程未处理的待办责任人
     * @return 待办信息
     */
    List<FltdTask> selectBatchCurrentTasks(String procGuid, String nodeCode);

    List<FltdTask> selectBatchExpertTasks(String ids);

    List<String> selectProcIds(String flowNo, String taskGuid, String bizGuids);

    List<FltdTask> selectCurrents(String procGuids, String nodeCode);

    /**
     * 查询待办数据
     * @param param
     * @return
     */
    List<FltdTask> selectTaskListData(FltdTaskVO param);

    /**
     * 根据多个流程类型查询待办数据
     * @param param
     * @return
     */
    List<FltdTask> selectTaskListInFlowNo(FltdTaskVO param);
    
	/**
	 * 补偿删除
	 * @throws Exception
	 */
	void compensateClose() throws Exception;
}
